package com.qf.sy2103.homework01.utils;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

/**
 * 操作项目中的文本文件的工具类
 */
public class FileUtils {


    /**
     * 把文本文件转换成 BufferedReader 对象
     * @param relativePath 文件的相对路径
     * @return
     */
    public static BufferedReader getBufferedReader(String relativePath) throws FileNotFoundException {

        final File file = new File(relativePath);

        final BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

        return bufferedReader;

    }


    /**
     * 从类路径中加载指定的文本文件，到内存的list中
     * @param classpathFile
     * @return
     */
    public static List<String> loadDataFromFile(String classpathFile) throws IOException {

        //1. 把文本文件转换成输入流对象
        final InputStream inputStream = FileUtils.class.getClassLoader().getResourceAsStream(classpathFile);

        //2. 创建BufferedReader对象
        final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        //3. 创建一个List对象，然后从文本文件中循环读取数据，放入该list中
        final ArrayList<String> list = new ArrayList<>();

        String line = null;

        while ( (line=bufferedReader.readLine())!=null ){
            list.add(line);
        }
        //4. 关闭流对象
        bufferedReader.close();
        inputStream.close();

        return list;

    }

    /**
     * 把list中的数据写入指定的文本文件中
     * @param data
     * @param relativeFilepath
     */
    public static void writeListToFile(List<String> data,String relativeFilepath) throws IOException {

        //0. 创建与relativeFilepath参数对应的file对象
        final File file = new File(relativeFilepath);
        if (!file.exists()){ // 如果文件不存在，则创建该文件
            file.createNewFile();
        }

        //1. 创建BufferWriter对象，注意，要使用追加模式
        final BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file,true));

        //2. 遍历list，把每一个字符串都写入到输出流中
        data.forEach(new Consumer<String>() {
            @Override
            public void accept(String line) {
                try {
                    bufferedWriter.write(line);
                    bufferedWriter.newLine(); // 写完一条数据后，增加换行符
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });

        // 3. 关闭流
        bufferedWriter.flush();  // 把缓存中的内如刷到文件中
        bufferedWriter.close();


    }



}
